<!DOCTYPE html>
<html>

<head>
	<meta charset="UTF-8">
	<title></title>
	<script src="vue.js"></script>
</head>

<body>
	<!-- 
	Computed特点：
	需要主动调用，具有缓存能力只有数据再次改变才会重新渲染，
	否则就会直接拿取缓存中的数据。

	计算属性computed :

	1. 支持缓存，只有依赖数据发生改变，才会重新进行计算
	2. 不支持异步，当computed内有异步操作时无效，无法监听数据的变化
	3.computed 属性值会默认走缓存，计算属性是基于它们的响应式依赖进行缓存的，也就是基于data中声明过或者父组件传递的props中的数据通过计算得到的值
	4. 如果一个属性是由其他属性计算而来的，这个属性依赖其他属性，是一个多对一或者一对一，一般用computed
	5.如果computed属性属性值是函数，那么默认会走get方法；函数的返回值就是属性的属性值；在computed中的，属性都有一个get和一个set方法，当数据变化时，调用set方法。

	总结：
	1.如果一个数据依赖于其他数据的简易计算处理的，那么使用computed比较合适。
	2.如果需要在某个数据变化时做一些事情，使用watch来观察这个数据变化 -->

	<div id="app">
		<div>
			<label>
				请输入内容:<input type="text" v-model="msg" />
			</label>
			<br />
			<br />
			您输入了(原字符串):{{msg}}
			<br />
			<br />
			反转字符串1:{{msg.split("").reverse().join("")}}
			<br />
			<br />
			反转字符串2:{{fn1}}
			<br />
			<br />
			反转字符串3:{{fn2()}}

		</div>
	</div>
	<script>
		var app = new Vue({
			el: "#app",
			data: {
				msg: ""
			},
			computed: {
				fn1() {
					return this.msg.split("").reverse().join("")
				}
			},
			methods: {
				fn2() {
					return this.msg.split("").reverse().join("")
				}
			}
		});

		var str = "abcd";
		var arr = str.split(""); //将字符串变成数组
		arr.reverse();
		console.log("arr:", arr);
		var str2 = arr.join("");
		console.log("str2:", str2);
	</script>
</body>

</html>